
#ifndef VOODOO_META_HPP
#define VOODOO_META_HPP

#ifndef VOODOO_IMPORT
#	define VOODOO_API __declspec(dllexport)
#else
#	define VOODOO_API __declspec(dllimport)
#endif

// Hide the DLL-interface warnings
#pragma warning(disable:4251)

#include "Includes.hpp"

namespace VoodooShader
{
	class Core;
	class Adapter;
	class Logger;

	class FullscreenManager;
	class MaterialManager;

	class Shader;
	
	class Technique;
	class Pass;
	class Parameter;

	class Texture;

	class Exception;

#define Throw(x, y) throw Exception(x, y, __FILE__, __FUNCTION__, __LINE__);

	// Shader collections
	typedef std::map<std::string, Shader*>		ShaderMap;
	typedef std::list<Shader*>					ShaderList;
	typedef std::vector<Shader*>				ShaderVector;
	// Technique collections
	typedef std::map<std::string, Technique *>	TechniqueMap;
	typedef std::list<Technique *>				TechniqueList;
	typedef std::vector<Technique *>			TechniqueVector;
	// Pass collections
	typedef std::map<std::string, Pass *>		PassMap;
	typedef std::list<Pass *>					PassList;
	typedef std::vector<Pass *>					PassVector;
	// Parameter collections
	typedef std::map<std::string, Parameter *>	ParameterMap;
	typedef std::list<Parameter *>				ParameterList;
	typedef std::vector<Parameter *>			ParameterVector;
	// Texture collections
	typedef std::map<std::string, Texture*>		TextureMap;
	typedef std::list<Texture*>					TextureList;
	typedef std::vector<Texture*>				TextureVector;
	// Miscellaneous collections
	typedef std::map<Texture *, Shader *>		MaterialMap;
	typedef std::map<std::string, CGeffect>		CGEffectMap;
}

#endif /*VOODOO_META_HPP*/